using UnityEngine;

/// <summary>
/// 玩家移动控制脚本，通过WASD键控制2D角色移动并播放对应动画
/// </summary>
[RequireComponent(typeof(Rigidbody2D), typeof(Animator))] // 自动添加必要组件
public class PlayerMovement : MonoBehaviour
{
    /// <summary>移动速度</summary>
    [Tooltip("角色移动速度")]
    public float moveSpeed = 5f;

    /// <summary>移动范围的最小边界（x,y）</summary>
    [Tooltip("移动范围的最小边界（x,y）")]
    public Vector2 minBounds;

    /// <summary>移动范围的最大边界（x,y）</summary>
    [Tooltip("移动范围的最大边界（x,y）")]
    public Vector2 maxBounds;

    /// <summary>刚体组件引用</summary>
    private Rigidbody2D rb;

    /// <summary>动画组件引用</summary>
    private Animator animator;

    /// <summary>移动方向向量</summary>
    private Vector2 movement;

    /// <summary>
    /// 初始化，获取组件引用
    /// </summary>
    void Start()
    {
        // 获取刚体组件
        rb = GetComponent<Rigidbody2D>();
        // 获取动画组件
        animator = GetComponent<Animator>();
    }

    /// <summary>
    /// 每帧更新，获取输入并控制动画
    /// </summary>
    void Update()
    {
        // 获取WASD输入（水平和垂直轴）
        movement.x = Input.GetAxis("Horizontal");
        movement.y = Input.GetAxis("Vertical");

        // 控制动画播放
        ControlAnimation();
    }

    /// <summary>
    /// 物理更新，应用移动
    /// </summary>
    void FixedUpdate()
    {
        // 归一化移动向量，确保斜向移动速度不会更快
        Vector2 normalizedMovement = movement.normalized;

        // 计算目标位置
        Vector2 targetPosition = rb.position + normalizedMovement * moveSpeed * Time.fixedDeltaTime;

        // 限制位置在规定范围内
        targetPosition.x = Mathf.Clamp(targetPosition.x, minBounds.x, maxBounds.x);
        targetPosition.y = Mathf.Clamp(targetPosition.y, minBounds.y, maxBounds.y);

        // 应用移动到刚体
        rb.MovePosition(targetPosition);
    }

    /// <summary>
    /// 根据按键输入控制动画播放
    /// </summary>
    private void ControlAnimation()
    {
        // 检测按键并设置对应的动画参数
        if (Input.GetKey(KeyCode.A))
        {
            // 按下A键，播放PlayerMove0动画
            animator.SetInteger("MoveAnimation", 0);
        }
        else if (Input.GetKey(KeyCode.W))
        {
            // 按下W键，播放PlayerMove1动画
            animator.SetInteger("MoveAnimation", 1);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            // 按下S键，播放PlayerMove2动画
            animator.SetInteger("MoveAnimation", 2);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            // 按下D键，播放PlayerMove3动画
            animator.SetInteger("MoveAnimation", 3);
        }
        else
        {
            // 没有按键按下时，停止动画（设置为-1表示无动画）
            animator.SetInteger("MoveAnimation", -1);
        }
    }
}